package com.lovely3x.jobservice.executors.extensions.downloader2.executor;

/**
 * 下载回调
 * Created by lovely3x on 16-1-28.
 */
public interface DownloadListener {
    /**
     * 发布进度
     *
     * @param start        开始字节数
     * @param max          结束字节数
     * @param current      已经下载的字节数
     * @param taskWhat     下载任务的标识
     * @param partSequence 块标识
     * @param buf          读取的字节数
     * @param len          读取的长度
     */
    void onDoing(long start, long max, long current, long taskWhat, int partSequence, byte[] buf, int len);

    /**
     * 当下载失败后执行
     *
     * @param e            失败的异常原因
     * @param start        开始字节数
     * @param max          结束字节数
     * @param current      已经下载的字节数
     * @param taskWhat     下载任务的标识
     * @param partSequence 块标识
     */
    void onFailure(Exception e, long start, long max, long current, long taskWhat, int partSequence);

    /**
     * 当下载成功后执行
     *
     * @param start        开始字节数
     * @param max          结束字节数
     * @param current      已经下载的字节数
     * @param taskWhat     下载任务的标识
     * @param partSequence 块标识
     */
    void onSuccessful(long start, long max, long current, long taskWhat, int partSequence);

    /**
     * 当下载被取消后执行
     *
     * @param start        开始字节数
     * @param max          结束字节数
     * @param current      已经下载的字节数
     * @param taskWhat     下载任务的标识
     * @param partSequence 块标识
     */
    void onCancel(long start, long max, long current, long taskWhat, int partSequence);

    /**
     * 开始下载时调用
     *
     * @param taskWhat     开始下载的任务
     * @param partSequence 开始下载的块
     */
    void onStart(long taskWhat, int partSequence);

    /**
     * 是否取消当前的下载任务
     *
     * @return true 或 false
     */
    boolean cancel();
}
